package requeteur.ihm.bean.converter;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

/**
 * Le fameux "GenericConverter" utilisé pour les SelectItems JSF afin de pouvoir mapper directerement vers des instances d'objets.
 * @author FX
 */
@ManagedBean
@ViewScoped
public class GenericConverter implements Converter, Serializable {

	/**
	 * Constructeur de la classe <code>GenericConverter</code>.
	 */
	public GenericConverter() {
	}

	/**
	 * Default serialVersionUID
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * tempStorage
	 */
	private Map<UUID, Object> tempStorage = new HashMap<UUID, Object>();

	/**
	 * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.String)
	 */
	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		Object o = null;
		try {
			if (!value.equals("")) {
				o = tempStorage.get(UUID.fromString(value));
			}
		} catch (IllegalArgumentException e) {
			o = null;
		}
		return o;
	}

	/**
	 * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object)
	 */
	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		UUID id = UUID.randomUUID();
		tempStorage.put(id, value);
		return id.toString();
	}
}
